#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>
#include "global.h"
namespace Ui {
class LoginDialog;
}

class LoginDialog : public QDialog
{
    Q_OBJECT

public:
    explicit LoginDialog(QWidget *parent = nullptr);
    ~LoginDialog();


signals:
    //创建信号
    void switchRegister();  //单纯只是一个信号，没有实现，事件源(触发事件)---->发出信号---->接受对象---->回调（发出信号）(事件源)---->接受对象--->回调函数
    //因此，提供了，连接信号与信号的函数，直接连接两个信号，不用通过中间的回调进行转发。
    void switchReset();     //信号
public slots:
    void slot_forget_pwd();

private slots:
    void on_login_button_clicked();

private:
    Ui::LoginDialog *ui;

private:

    bool checkEmailValid();     //检查邮箱,只是检查是否可以发送待服务器
    bool checkPassValid();      //检查密码


    void AddTipErr(TipErr errid, QString str);
    void DelTipErr(TipErr errid);

    void ShowTips(QString str,bool istrue);

    QMap<TipErr, QString> err_text;

    bool checkAllValid();

    //函数对象集合
    QMap<ReqId ,std::function<void(const QJsonObject&)>> _map_function;

public slots:

    //消息回来之后的处理，还有ID的处理
    //两种方式：把函数对象存储起来，然后使用，二，再次使用信号，使用第一种方式
    void slot_login_mod_finish(ReqId id, QString res, ErrorCodes err);

    void initHanler();

signals:

    void sig_connect_tcp(ServerInfo si);
};

#endif // LOGINDIALOG_H
